/*
 * CS_REQ_SHOW_OTHERS.cpp
 *
 *  Created on: 2013. 8. 26.
 *      Author: jjaehuny
 */

#include "Tutorial.h"
#include "../../../constant.h"
#include "../../../User.h"

#include "../../../NLogic/Static.h"

namespace ProjectZ { namespace NCommand { namespace NWorld { namespace NTutorial {


// 이미 케릭터 정보를 받은 후에 그 케릭터에 튜토리얼 정보를 요청하는 패킷
void CS_REQ_SHOW_OTHERS::OnExecute(User * pUser, ::Network::Packet * pPacket)
{
//	PREPARE_PACKET;
//
//	/* Message 정의
//		CS_REQ_SHOW_OTHERS			0x0946
//		{
//				u8 u8show;				/// 0:숨김처리 요청, 1:보여주기(초대 메세지 블럭, 마을에 보이지 않음)
//		}
//	 */
//
	PREPARE_PACKET;

	uint8_t u8show;		// 상대방 GID
	* pPacket >> u8show;

	NLogic::Space * pSpace = pUser->GetSpace();

	if (0 == u8show)
	{
		pUser->SetEnumState(User::EnumState::TUTORIAL);
		if (NULL != pSpace)
			pSpace->LeaveUser(pUser);
	}
	else
	{
		if (NULL == pSpace)
		{
			NLogic::Space * pWorld = pUser->_getWorldSpace();
			if (NULL == pWorld)
			{
				if (pUser->GetUserInfo().nickname[0] == 'Q' && pUser->GetUserInfo().nickname[1] == 'A')
				{
					DEBUGLOG("CS_INPUTINFO QA INPUT NICK : %s", pUser->GetUserInfo().nickname.c_str());
					pSpace = NLogic::Static::Instance().GETWORLDSPACETREE().rbegin()->second;
				}
				else
				{
					DEBUGLOG("CS_INPUTINFO OTHER INPUT NICK : %s", pUser->GetUserInfo().nickname.c_str());
					pSpace = NLogic::Static::Instance().GETWORLDSPACETREE().begin()->second;
				}
				pUser->_setWorldSpace(pSpace);
			}
			else
			{
				pSpace = pWorld;
			}
		}

		//pUser->SetEnumState(User::EnumState::TUTORIAL);
		pUser->SetEnumState(User::EnumState::__NONE__);
		pSpace->EnterUser(pUser);
	}

	::Network::Packet * pAck = ::Network::GETPACKETPOOL()->SEND_NEW();
	* pAck << static_cast<uint16_t>(1);
	* pAck << u8show;
	pAck->MakePacket(CMD_SC_REQ_SHOW_OTHERS);
	pUser->Send(pAck);
}

} /*NTutorial*/ } /*NWorld*/ } /*NCommand*/ } /*ProjectZ*/




